/**
 * 权限常量定义
 * 统一管理前端权限相关的常量，避免硬编码
 * 
 * @author Wu.Liang
 * @date 2025-01-30
 */

// ==================== 权限编码常量 ====================

/**
 * 权限编码常量
 */
export const PERMISSION_CODES = {
  // 用户管理权限
  USER_VIEW: 'user:view',
  USER_CREATE: 'user:create',
  USER_UPDATE: 'user:update',
  USER_DELETE: 'user:delete',
  USER_EXPORT: 'user:export',
  
  // 角色管理权限
  ROLE_VIEW: 'role:view',
  ROLE_CREATE: 'role:create',
  ROLE_UPDATE: 'role:update',
  ROLE_DELETE: 'role:delete',
  ROLE_ASSIGN: 'role:assign',
  
  // 权限管理权限
  PERMISSION_VIEW: 'permission:view',
  PERMISSION_ASSIGN: 'permission:assign',
  
  // 物业公司管理权限（简化后）
  PROPERTY_COMPANY_MENU: 'property:company:menu',
  
  // 户型配置管理权限
  REGION_HOUSE_TYPE_MENU: 'region:house-type:menu',
  
  // 分区管理权限（仅菜单权限）
  REGION_ZONE_MENU: 'region:zone:menu',
  
  // 计费方式管理权限
  PROPERTY_BILLING_METHOD_MENU: 'property:billing-method:menu',
  
  // 物业信息管理权限
  PROPERTY_INFO_VIEW: 'property:info:view',
  PROPERTY_INFO_UPDATE: 'property:info:update',
  PROPERTY_INFO_EXPORT: 'property:info:export',
  PROPERTY_INFO_CACHE: 'property:info:cache',
  
  // 区域管理权限
  REGION_VIEW: 'region:view',
  REGION_CREATE: 'region:create',
  REGION_UPDATE: 'region:update',
  REGION_DELETE: 'region:delete',
  
  // 社区管理权限
  COMMUNITY_VIEW: 'community:view',
  COMMUNITY_CREATE: 'community:create',
  COMMUNITY_UPDATE: 'community:update',
  COMMUNITY_DELETE: 'community:delete',
  
  // 楼栋管理权限
  BUILDING_VIEW: 'building:view',
  BUILDING_CREATE: 'building:create',
  BUILDING_UPDATE: 'building:update',
  BUILDING_DELETE: 'building:delete',
  
  // 房户管理权限
  HOUSEHOLD_VIEW: 'household:view',
  HOUSEHOLD_CREATE: 'household:create',
  HOUSEHOLD_UPDATE: 'household:update',
  HOUSEHOLD_DELETE: 'household:delete',
  
  // 住户管理权限
  RESIDENT_MENU: 'resident:menu',
  RESIDENT_VIEW: 'resident:view',
  RESIDENT_CREATE: 'resident:create',
  RESIDENT_UPDATE: 'resident:update',
  RESIDENT_DELETE: 'resident:delete',
  
  // 停车管理权限
  PARKING_VIEW: 'parking:view',
  PARKING_CREATE: 'parking:create',
  PARKING_UPDATE: 'parking:update',
  PARKING_DELETE: 'parking:delete',
  
  // 安防管理权限
  SECURITY_VIEW: 'security:view',
  SECURITY_CREATE: 'security:create',
  SECURITY_UPDATE: 'security:update',
  SECURITY_DELETE: 'security:delete',
  
  // 投诉管理权限
  COMPLAINT_VIEW: 'complaint:view',
  COMPLAINT_CREATE: 'complaint:create',
  COMPLAINT_UPDATE: 'complaint:update',
  COMPLAINT_DELETE: 'complaint:delete',
  COMPLAINT_PROCESS: 'complaint:process',
  
  // 支付管理权限
  PAYMENT_VIEW: 'payment:view',
  PAYMENT_CREATE: 'payment:create',
  PAYMENT_UPDATE: 'payment:update',
  PAYMENT_DELETE: 'payment:delete',
  PAYMENT_REFUND: 'payment:refund',
  
  // 系统管理权限
  SYSTEM_CONFIG: 'system:config',
  SYSTEM_CONFIG_MENU: 'system:config:menu',
  SYSTEM_CONFIG_VIEW: 'system:config:view',
  SYSTEM_CONFIG_UPDATE: 'system:config:update',
  SYSTEM_LOG: 'system:log',
  SYSTEM_LOG_MENU: 'operation:log:menu',
  SYSTEM_LOG_VIEW: 'system:log:view',
  SYSTEM_LOGIN_LOG_MENU: 'login:log:menu',
  SYSTEM_MONITOR_VIEW: 'system:monitor:view'
} as const

// ==================== 权限分组常量 ====================

/**
 * 权限分组常量
 */
export const PERMISSION_GROUPS = {
  // 用户管理组
  USER_MANAGEMENT: 'user_management',
  
  // 角色管理组
  ROLE_MANAGEMENT: 'role_management',
  
  // 权限管理组
  PERMISSION_MANAGEMENT: 'permission_management',
  
  // 物业公司管理组
  PROPERTY_COMPANY_MANAGEMENT: 'property_company_management',
  
  // 物业信息管理组
  PROPERTY_INFO_MANAGEMENT: 'property_info_management',
  
  // 区域管理组
  REGION_MANAGEMENT: 'region_management',
  
  // 社区管理组
  COMMUNITY_MANAGEMENT: 'community_management',
  
  // 楼栋管理组
  BUILDING_MANAGEMENT: 'building_management',
  
  // 房户管理组
  HOUSEHOLD_MANAGEMENT: 'household_management',
  
  // 住户管理组
  RESIDENT_MANAGEMENT: 'resident_management',
  
  // 停车管理组
  PARKING_MANAGEMENT: 'parking_management',
  
  // 安防管理组
  SECURITY_MANAGEMENT: 'security_management',
  
  // 投诉管理组
  COMPLAINT_MANAGEMENT: 'complaint_management',
  
  // 支付管理组
  PAYMENT_MANAGEMENT: 'payment_management',
  
  // 系统管理组
  SYSTEM_MANAGEMENT: 'system_management'
} as const

// ==================== 权限操作常量 ====================

/**
 * 权限操作常量
 */
export const PERMISSION_ACTIONS = {
  // 基础操作
  VIEW: 'view',
  CREATE: 'create',
  UPDATE: 'update',
  DELETE: 'delete',
  
  // 扩展操作
  EXPORT: 'export',
  IMPORT: 'import',
  AUDIT: 'audit',
  ASSIGN: 'assign',
  PROCESS: 'process',
  REFUND: 'refund',
  CACHE: 'cache'
} as const

// ==================== 权限类型常量 ====================

/**
 * 权限类型常量
 */
export const PERMISSION_TYPES = {
  // 菜单权限
  MENU: 'menu',
  
  // 数据权限
  DATA: 'data'
} as const

// ==================== 工具函数 ====================

/**
 * 获取权限编码
 * @param resource 资源名称
 * @param action 操作类型
 * @returns 权限编码
 */
export function getPermissionCode(resource: string, action: string): string {
  return `${resource}:${action}`
}

/**
 * 解析权限编码
 * @param permissionCode 权限编码
 * @returns 解析结果
 */
export function parsePermissionCode(permissionCode: string): { resource: string; action: string } {
  const parts = permissionCode.split(':')
  if (parts.length >= 2) {
    return {
      resource: parts[0],
      action: parts[1]
    }
  }
  return {
    resource: '',
    action: ''
  }
}

/**
 * 检查是否为有效权限编码
 * @param permissionCode 权限编码
 * @returns 是否有效
 */
export function isValidPermissionCode(permissionCode: string): boolean {
  return Object.values(PERMISSION_CODES).includes(permissionCode as any)
}

/**
 * 获取权限描述
 * @param permissionCode 权限编码
 * @returns 权限描述
 */
export function getPermissionDescription(permissionCode: string): string {
  const permissionDescriptions: Record<string, string> = {
    // 用户管理权限描述
    [PERMISSION_CODES.USER_VIEW]: '查看用户信息',
    [PERMISSION_CODES.USER_CREATE]: '创建用户',
    [PERMISSION_CODES.USER_UPDATE]: '更新用户信息',
    [PERMISSION_CODES.USER_DELETE]: '删除用户',
    [PERMISSION_CODES.USER_EXPORT]: '导出用户数据',
    
    // 角色管理权限描述
    [PERMISSION_CODES.ROLE_VIEW]: '查看角色信息',
    [PERMISSION_CODES.ROLE_CREATE]: '创建角色',
    [PERMISSION_CODES.ROLE_UPDATE]: '更新角色信息',
    [PERMISSION_CODES.ROLE_DELETE]: '删除角色',
    [PERMISSION_CODES.ROLE_ASSIGN]: '分配角色',
    
    // 权限管理权限描述
    [PERMISSION_CODES.PERMISSION_VIEW]: '查看权限信息',
    [PERMISSION_CODES.PERMISSION_ASSIGN]: '分配权限',
    
    // 物业公司管理权限描述
    [PERMISSION_CODES.PROPERTY_COMPANY_VIEW]: '查看物业公司信息',
    [PERMISSION_CODES.PROPERTY_COMPANY_CREATE]: '创建物业公司',
    [PERMISSION_CODES.PROPERTY_COMPANY_UPDATE]: '更新物业公司信息',
    [PERMISSION_CODES.PROPERTY_COMPANY_DELETE]: '删除物业公司',
    [PERMISSION_CODES.PROPERTY_COMPANY_AUDIT]: '审核物业公司',
    
    // 户型配置管理权限描述
    [PERMISSION_CODES.REGION_HOUSE_TYPE_MENU]: '户型配置管理',
    
    // 分区管理权限描述（仅菜单权限）
    [PERMISSION_CODES.REGION_ZONE_MENU]: '分区管理',
    
    // 计费方式管理权限描述
    [PERMISSION_CODES.PROPERTY_BILLING_METHOD_MENU]: '计费方式管理',
    
    // 物业信息管理权限描述
    [PERMISSION_CODES.PROPERTY_INFO_VIEW]: '查看物业信息',
    [PERMISSION_CODES.PROPERTY_INFO_UPDATE]: '更新物业信息',
    [PERMISSION_CODES.PROPERTY_INFO_EXPORT]: '导出物业信息',
    [PERMISSION_CODES.PROPERTY_INFO_CACHE]: '管理物业信息缓存',
    
    // 区域管理权限描述
    [PERMISSION_CODES.REGION_VIEW]: '查看区域信息',
    [PERMISSION_CODES.REGION_CREATE]: '创建区域',
    [PERMISSION_CODES.REGION_UPDATE]: '更新区域信息',
    [PERMISSION_CODES.REGION_DELETE]: '删除区域',
    
    // 社区管理权限描述
    [PERMISSION_CODES.COMMUNITY_VIEW]: '查看社区信息',
    [PERMISSION_CODES.COMMUNITY_CREATE]: '创建社区',
    [PERMISSION_CODES.COMMUNITY_UPDATE]: '更新社区信息',
    [PERMISSION_CODES.COMMUNITY_DELETE]: '删除社区',
    
    // 楼栋管理权限描述
    [PERMISSION_CODES.BUILDING_VIEW]: '查看楼栋信息',
    [PERMISSION_CODES.BUILDING_CREATE]: '创建楼栋',
    [PERMISSION_CODES.BUILDING_UPDATE]: '更新楼栋信息',
    [PERMISSION_CODES.BUILDING_DELETE]: '删除楼栋',
    
    // 房户管理权限描述
    [PERMISSION_CODES.HOUSEHOLD_VIEW]: '查看房户信息',
    [PERMISSION_CODES.HOUSEHOLD_CREATE]: '创建房户',
    [PERMISSION_CODES.HOUSEHOLD_UPDATE]: '更新房户信息',
    [PERMISSION_CODES.HOUSEHOLD_DELETE]: '删除房户',
    
    // 停车管理权限描述
    [PERMISSION_CODES.PARKING_VIEW]: '查看停车信息',
    [PERMISSION_CODES.PARKING_CREATE]: '创建停车记录',
    [PERMISSION_CODES.PARKING_UPDATE]: '更新停车信息',
    [PERMISSION_CODES.PARKING_DELETE]: '删除停车记录',
    
    // 安防管理权限描述
    [PERMISSION_CODES.SECURITY_VIEW]: '查看安防信息',
    [PERMISSION_CODES.SECURITY_CREATE]: '创建安防记录',
    [PERMISSION_CODES.SECURITY_UPDATE]: '更新安防信息',
    [PERMISSION_CODES.SECURITY_DELETE]: '删除安防记录',
    
    // 投诉管理权限描述
    [PERMISSION_CODES.COMPLAINT_VIEW]: '查看投诉信息',
    [PERMISSION_CODES.COMPLAINT_CREATE]: '创建投诉',
    [PERMISSION_CODES.COMPLAINT_UPDATE]: '更新投诉信息',
    [PERMISSION_CODES.COMPLAINT_DELETE]: '删除投诉',
    [PERMISSION_CODES.COMPLAINT_PROCESS]: '处理投诉',
    
    // 支付管理权限描述
    [PERMISSION_CODES.PAYMENT_VIEW]: '查看支付信息',
    [PERMISSION_CODES.PAYMENT_CREATE]: '创建支付',
    [PERMISSION_CODES.PAYMENT_UPDATE]: '更新支付信息',
    [PERMISSION_CODES.PAYMENT_DELETE]: '删除支付记录',
    [PERMISSION_CODES.PAYMENT_REFUND]: '退款处理',
    
    // 系统管理权限描述
    [PERMISSION_CODES.SYSTEM_CONFIG_VIEW]: '查看系统配置',
    [PERMISSION_CODES.SYSTEM_CONFIG_UPDATE]: '更新系统配置',
    [PERMISSION_CODES.SYSTEM_LOG_VIEW]: '查看系统日志',
    [PERMISSION_CODES.SYSTEM_MONITOR_VIEW]: '查看系统监控'
  }
  
  return permissionDescriptions[permissionCode] || '未知权限'
} 